package com.atguigu.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * @author Jungle
 *    整合mybatis-plus
 *      1.导入mybatis-plus依赖
 *      2.配置
 *          1》配置数据源
 *              1》导入驱动 mysql-connector --已经放置common中
 *              2》配置数据源相关信息
 *          2》配置mybatis-plus
 *              1>配置@MapperScan扫描dao
 *              2>配置映射文件sql的位置
 *   EnableFeignClients 如果不声明basePackages也可以但是 需要在 GulimallProductApplication字包下面
 *
 *
 *   4、统—的异常处理ControllerAdvicc
 *      1)、编写异常处理类,使用@ControlLerAdvicco
 *      2)、使用@ExceptionHandlLer标注方法可以处理的异常。
 * 5、模板引擎
 *      1 )、 thymcLeaf-startar:关闭缓存
 *      2) 、静态资源都放在statie文件夹下就可以按照路径直接访间
 *      3)、页面放在tempLates下,直接访间
 *      4} 页面修改不重启实时更新
 *        1）、引入dev-tools
 *        2)、修改完页面controlLer shift f9重新自动编译下页面,代码配置还是需要重启
 *  6、整合redis
     * 1)、引入data-redis-starter
     * 2)、简单配置redis的host等信息
     * 3)、使用SpringBoot自动配置好的stringRedisTempLatc来操作redis  (RedisAutoConfiguration类中查看)
 *      redis-> Map;存放数据key，数据值vaLue
 *
 *  7.整合redisson作为分布式锁功能框架
 *      1.引入依赖
 *      <dependency>
 *             <groupId>org.redisson</groupId>
 *             <artifactId>redisson</artifactId>
 *             <version>3.12.0</version>
 *  *         </dependency>
 *          这个用作连续，后面可以使用redisson-spring-boot-starter
 *      2.配置redisson
 *      3.使用
 *      参照文档做
 *    3、整合springcache简化缓存开发
 *      1）、引入依赖
 *       spring-boot-starter-cache  spring-boot-starter-data-redis
 *      2）、写配置
 *        （1）、自动配置了哪些  查看-CacheAutoConfiguration  会导入 RedisCacheConfiguration
 *        自动配置好了缓存管理器 RedisCacheManager
 *        （2）、配置使用redis作为缓存
 *          spring.cache.type=redis
 *      3）、测试使用缓存
 *       @Cacheable: Triggers cache population.：触发将数据保存到缓存的操作
     *   @CacheEvict: Triggers cache eviction.  触发将数据从缓存中删除的操作
     *   @CachePut: Updates the cache without interfering with the method execution.  ：不影响方法执行的更新缓存
     *   @Caching: Regroups multiple cache operations to be applied on a method.  ：组合以上多个操作
     *   @CacheConfig: Shares some common cache-related settings at class-level.： 在类级别共享缓存的配置
 *          （1）、开启缓存功能  @EnableCaching
 *          （2）、只需要使用注解就能完成缓存操作
 *      4）。原理
 *         CacheAutoConfiguration -》RedisCacheConfiguration-》
 *         自动配置了缓存管理器RedisCacheManager-》初始化所有的缓存-》每个缓存决定使用什么配置
 *         -》如果redisCacheConfiguration有就用已经有的，如果没有，就用默认配置
 *         ->想改缓存的配置，只需要在容器中放一个 RedisCacheConfiguration即可
 *         -》就会应用到当前RedisCacheManager管理的所有缓存分区中
 */

//@EnableCaching  放任意一个位置即可，已经放倒配置文件上
@EnableRedisHttpSession
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")
@MapperScan("com.atguigu.gulimall.product.dao")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
